<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Android高级面试 10大开源框架源码解析</title>
</head>
<body>
<div class="learn-course-list">

    <div class="list-item">
        <h3>
            第1章 课程介绍
        </h3>
        <ul>
            <li class="finished">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8811">
                    1-1 课程导学 (07:59) </a>


                <i class="sz-full iright pink"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第2章 Okhttp网络库深入解析和相关面试题分析
        </h3>
        <ul>
            <li class="finished">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9392">
                    2-1 okhttp框架流程分析 (07:00) </a>


                <i class="sz-full iright pink"></i>
            </li>
            <li class="finished">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8668">
                    2-2 okhttp同步请求方法 (07:17) </a>


                <i class="sz-full iright pink"></i>
            </li>
            <li class="finished">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8669">
                    2-3 okhttp异步请求方法 (03:43) </a>


                <i class="sz-full iright pink"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8670">
                    2-4 okhttp同步请求流程和源码分析 (12:36) </a>


                <i class="sz-empty iright pink"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8671">
                    2-5 okhttp异步请求流程和源码分析-1 (07:29) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8672">
                    2-6 okhttp异步请求流程和源码分析-2 (08:04) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8673">
                    2-7 okhttp任务调度核心类dispatcher解析-1 (05:43) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8674">
                    2-8 okhttp任务调度核心类dispatcher解析-2 (09:03) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8675">
                    2-9 okhttp拦截器流程 (03:26) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8676">
                    2-10 okhttp拦截器链介绍 (07:09) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8677">
                    2-11 okhttp之RetryAndFollowUpInterceptor解析 (05:42) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8678">
                    2-12 okhttp之BridgeInterceptor解析 (05:52) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8679">
                    2-13 okhttp缓存策略源码分析：put方法 (09:18) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8681">
                    2-14 okhttp缓存策略源码分析：get方法 (04:33) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8812">
                    2-15 okhttp拦截器之CacheInterceptor解析 (10:52) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8683">
                    2-16 okhttp拦截器之ConnectInterceptor解析-1 (05:14) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8684">
                    2-17 okhttp拦截器之ConnectInterceptor解析-2 (08:52) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8813">
                    2-18 okhttp连接池：put,get方法 (06:39) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8814">
                    2-19 okhttp连接池：connection回收 (05:57) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8687">
                    2-20 okhttp拦截器之CallServerInterceptor解析 (09:04) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9599">
                    2-21 okhttp面试: Socket-1 (07:23) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9600">
                    2-22 okhttp面试: Socket-2 (07:17) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9601">
                    2-23 okhttp面试: HttpClient&amp;HttpUrlConnection (05:25) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9605">
                    2-24 okhttp面试: OkHttp来实现WebSocket连接 (05:13) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9602">
                    2-25 okhttp面试: WebSocket&amp;轮询相关 (08:38) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9606">
                    2-26 okhttp面试: Http缓存、Etag等标示作用 (08:18) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9610">
                    2-27 okhttp面试: 断点续传原理&amp;Okhttp如何实现 (05:35) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9612">
                    2-28 okhttp面试：多线程下载 (06:12) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9613">
                    2-29 okhttp面试：文件上传&amp;Okhttp如何处理文件上传 (02:56) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9769">
                    2-30 okhttp面试：如何解析Json类型数据 (02:38) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9770">
                    2-31 okhttp面试：Https／对称加密&amp;不对称加密 (08:54) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第3章 Retrofit网络库深入解析和相关面试题分析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9393">
                    3-1 retrofit流程分析 (09:08) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8688">
                    3-2 retrofit概述 (03:29) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8689">
                    3-3 retrofit官网例子解析 (04:52) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8690">
                    3-4 retrofit请求过程7步骤详解 (06:36) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8691">
                    3-5 静态代理模式讲解 (04:53) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8692">
                    3-6 动态代理模式讲解 (09:44) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8693">
                    3-7 retrofit网络通信流程8步骤&amp;7个关键成员变量解析 (08:35) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8694">
                    3-8 retrofit中builder构建者模式&amp;builder内部类解析 (09:09) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8695">
                    3-9 retrofit中baseurl／converter／calladapter解析 (05:57) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8815">
                    3-10 retrofit中build方法完成retrofit对象创建流程解析 (06:47) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8697">
                    3-11 retrofit中RxjavaCallAdapterFactory内部构造与工作原理解析 (09:25) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8698">
                    3-12 retrofit中网络请求接口实例解析 (11:11) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8699">
                    3-13 retrofit中serviceMethod对象解析 (15:31) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8700">
                    3-14 retrofit中okHttpCall对象和adapt返回对象解析 (08:13) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8701">
                    3-15 retrofit中同步请求&amp;重要参数解析 (10:32) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8822">
                    3-16 retrofit中异步请求解析 (03:13) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8816">
                    3-17 retrofit设计模式解析-1：构建者模式 (05:34) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8817">
                    3-18 retrofit设计模式解析-2：工厂模式 (03:16) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8818">
                    3-19 retrofit设计模式解析-3：外观模式 (04:36) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8819">
                    3-20 retrofit设计模式解析-4：策略模式 (05:59) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8820">
                    3-21 retrofit设计模式解析-5：适配器模式 (02:48) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8821">
                    3-22 retrofit设计模式解析-6：动态代理模式／观察者 (05:30) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10493">
                    3-23 retrofit面试题：retfrofit线程切换（异步机制Looper) (07:01) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10505">
                    3-24 retrofit面试题：rxjava和retrofit如何结合进行网络请求 (07:01) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10495">
                    3-25 retrofit面试题：Hook与动态代理 (11:34) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10497">
                    3-26 retrofit面试题：Android MVC架构优势和缺点 (09:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10500">
                    3-27 retrofit面试题：MVP优点和缺点 (08:19) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10503">
                    3-28 retrofit面试题：sp跨进程&amp;apply和commit方法 (09:32) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第4章 Glide图片库深入解析和相关面试题分析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8823">
                    4-1 glide框架流程分析 (04:24) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8826">
                    4-2 glide框架介绍-1 (08:42) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8831">
                    4-3 glide框架介绍-2 (08:14) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8835">
                    4-4 glide图片加载流程和源码分析-1：with方法（requestManager获取) (05:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8838">
                    4-5 glide图片加载流程和源码分析-2：with方法（requestManagerRetriever的get方法) (10:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8842">
                    4-6 glide图片加载流程和源码分析-3：load方法 (09:01) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8843">
                    4-7 glide图片加载流程和源码分析-4：into方法（buildTarget） (11:30) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8844">
                    4-8 glide图片加载流程和源码分析-5：into方法（request建立和begin方法） (10:39) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8845">
                    4-9 glide图片加载流程和源码分析-6：into方法（Loadprovider） (08:39) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8846">
                    4-10 glide图片加载流程和源码分析-7：into方法（硬盘缓存／内存缓存) (06:12) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8847">
                    4-11 glide图片加载流程和源码分析-8：into方法（内存缓存的读取） (06:44) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8848">
                    4-12 glide图片加载流程和源码分析-9：into方法（内存缓存的写入） (06:20) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9604">
                    4-13 Glide面试一：bitmap&amp;oom&amp;优化bitmap (10:48) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9609">
                    4-14 Glide面试二：三级缓存&amp;lrucache (12:01) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第5章 LeakCanary内存泄漏框架解析和相关面试题分析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9394">
                    5-1 leakcanary预备知识：android性能优化&amp;Gcroots (09:37) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8824">
                    5-2 leakcanary内存框架：内存泄漏基础&amp;为什么需要leakcanary (05:28) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8825">
                    5-3 android常见内存泄漏分析-1：单例VS非静态内部类 (04:09) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8828">
                    5-4 android常见内存泄漏分析-2：handler&amp;解决办法 (03:27) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8830">
                    5-5 android常见内存泄漏分析-3：线程&amp;WebView (04:17) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8833">
                    5-6 leakcanary原理分析-1：Leakcanary原理概述和弱引用／引用队列 (05:57) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8836">
                    5-7 leakcanary原理分析-2：ActivityRefWatcher如何监视Activity (12:31) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8839">
                    5-8 leakcanary原理分析-3：.hprof转换snapshot (07:12) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8841">
                    5-9 leakcanary原理分析-4：查找内存泄漏引用和最短泄漏路径 (06:03) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10504">
                    5-10 leakcanary面试题：Application&amp;内存 (12:12) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10494">
                    5-11 leakcanary面试题：性能数据上报：网络流量和冷启动 (11:23) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10496">
                    5-12 leakcanary面试题：性能数据上报：UI卡顿和内存占用 (10:15) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第6章 butterknife依赖注入框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8827">
                    6-1 butterknife的引言和基本使用 (04:27) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8829">
                    6-2 butterknife原理必备知识点1：注解 (07:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8832">
                    6-3 butterknife原理必备知识点2：APT工作原理 (08:08) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8834">
                    6-4 butterknife原理必备知识点3：反射+运行时注解举例 (05:24) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8837">
                    6-5 butterknife原理分析-1：注解处理器如何处理注解和保存注解 (10:19) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=8840">
                    6-6 butterknife原理分析-2：如何生成findviewByID代码 (08:52) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第7章 blockcanary UI卡顿优化框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9086">
                    7-1 blockcanary背景／UI卡顿原理／UI卡顿常见原因 (07:07) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9087">
                    7-2 blockcanary使用／阀值参数 (02:45) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9088">
                    7-3 blockcanary核心原理实现和流程图简述 (06:21) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9089">
                    7-4 blockcanary源码解析-1：框架初始化 (06:15) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9090">
                    7-5 blockcanary源码解析-2：stacksampler／cpusampler／start方法 (07:46) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9603">
                    7-6 blockcanary面试一：anr场景／原因／解决 (06:13) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9607">
                    7-7 blockcanary面试二：watchdog-anr 如何检测anr (05:39) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9608">
                    7-8 blockcanary面试三：new Thread开启线程的4点弊端 (04:35) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9611">
                    7-9 blockcanary面试四：线程间通信：子线程--UI线程 (08:37) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9614">
                    7-10 blockcanary面试五：主线程--子线程(handlerThread-IntentService) (11:50) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9615">
                    7-11 blockcanary面试六：多进程的4点好处与问题／voliate关键字 (07:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9616">
                    7-12 blockcanary面试七：voliate关键字和单例的写法 (06:32) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第8章 eventbus异步框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9091">
                    8-1 eventbus框架核心概念：事件传递／EventBus的优点／传统handler通信的两种方式 (07:09) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9092">
                    8-2 eventbus框架基本用法 (05:34) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9093">
                    8-3 eventbus框架源码解析-1：EventBus对象构建／如何进行线程调度 (11:58) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9094">
                    8-4 eventbus框架源码解析-2 subscribe注解／threadMode (05:36) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9095">
                    8-5 eventbus框架源码解析-3：register订阅(上) (07:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9096">
                    8-6 eventbus框架源码解析-4：register订阅（中） (04:38) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9097">
                    8-7 eventbus框架源码解析-5：register订阅（下） (05:03) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9098">
                    8-8 eventbus框架源码解析-6：subscribe方法完成订阅（上） (07:27) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9100">
                    8-9 eventbus框架源码解析-7：subscribe方法完成订阅（下） (03:40) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9102">
                    8-10 eventbus框架源码解析-8：发送事件post (06:25) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第9章 dagger2依赖注入框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9347">
                    9-1 dagger2引言：依赖注入和使用场景 (03:59) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9348">
                    9-2 dagger2四种注入方式和依赖注入总结 (05:00) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9349">
                    9-3 dagger2的四种基本注解：@inject注解 (04:39) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9351">
                    9-4 dagger2的四种基本注解：@component注解 (02:40) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9353">
                    9-5 dagger2的inject和component注解实例和源码分析 (07:02) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9354">
                    9-6 dagger2的@Module和@Provides注解 (03:25) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9355">
                    9-7 dagger2的@Module和@Provides注解实例和代码分析 (04:55) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第10章 rxjava异步框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9360">
                    10-1 rxjava基本用法和观察者模式：01-传统观察者模式 (10:15) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9361">
                    10-2 rxjava观察者模式和基本用法 (09:01) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9362">
                    10-3 rxjava如何创建Observable&amp;observer／subscriber (05:15) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9363">
                    10-4 rxjava如何创建subscriber以及如何完成订阅 (06:29) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9364">
                    10-5 rxjava操作符之map基本使用 (03:45) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9365">
                    10-6 rxjava操作符之map源码探究：lift (06:33) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9366">
                    10-7 rxjava操作符之flatmap (03:33) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9395">
                    10-8 rxjava线程控制：多线程编程准则&amp;Rxjava如何处理多线程&amp;&amp;Schedulers (06:56) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9396">
                    10-9 rxjava线程控制：两个小例子&amp;observeOn和SubscribeOn (06:17) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9397">
                    10-10 rxjava线程控制：SubscribeOn源码剖析 (09:40) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9402">
                    10-11 rxjava线程控制：ObserveOn源码剖析&amp;&amp;subscribeOn可以调用几次 (05:53) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第11章 picasso图片框架源码解析
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9953">
                    11-1 picasso框架基本使用API (06:53) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9954">
                    11-2 picasso源码with方法：内存缓存Lrucache和线程池的调度 (09:08) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9955">
                    11-3 piacsso源码with：dispatcher如何完成线程切换 (10:24) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9956">
                    11-4 picasso源码with：NetworkRequestHandler处理图片请求和回调 (05:13) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9957">
                    11-5 picasso源码load方法 (02:10) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9958">
                    11-6 picasso源码into方法：Action&amp;BitmapHunter (08:35) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9959">
                    11-7 picasso源码into方法：线程池&amp;PicassoFutureTask (10:29) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9960">
                    11-8 picasso源码into：线程开启如何执行图片加载请求？ (05:25) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9961">
                    11-9 picasso源码into：Okhttp和UrlConnectionDownloader下载图片 (05:12) </a>


                <i class="sz-empty iright"></i>
            </li>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=9962">
                    11-10 picasso源码into方法：完成加载 (06:30) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>
    <div class="list-item">
        <h3>
            第12章 课程总结
        </h3>
        <ul>
            <li class="">
                <i class="imv2-video ileft"></i>
                <a target="_blank" href="/lesson/157.html#mid=10739">
                    12-1 Android面试技巧梳理 (13:48) </a>


                <i class="sz-empty iright"></i>
            </li>
        </ul>
    </div>

    <div class="chapter-update-state clearfix">
        <i class="imv2-check"></i>
        <span>本课程已完结</span>
    </div>
</div>
</body>
</html>